Fix #2595 by skipping reflexive replacements
authorJohn Ericson <Ericson2314@Yahoo.com>
Thu, 14 Jul 2016 18:46:22 +0000 (11:46 -0700)
committerJohn Ericson <Ericson2314@Yahoo.com>
Thu, 14 Jul 2016 18:57:09 +0000 (11:57 -0700)
src/cargo/core/resolver/mod.rs

index f95342cbfb4770996954ed73cf66a9c679d812e9..3eb05043a47832ee68f3796106c05329f5e73cf8 100644 (file)
@@ -819,7 +819,12 @@ impl<'a> Context<'a> {
             assert_eq!(s.version(), summary.version());
             assert_eq!(s.name(), summary.name());
 
-            let replace = Rc::new(s);
+            let replace = if s.source_id() == summary.source_id() {
+                debug!("Preventing\n{:?}\nfrom replacing\n{:?}", summary, s);
+                None
+            } else {
+                Some(Rc::new(s))
+            };
             let matched_spec = spec.clone();
 
             // Make sure no duplicates
@@ -829,7 +834,7 @@ impl<'a> Context<'a> {
                       matched_spec, spec, summary.package_id());
             }
 
-            Ok(Candidate { summary: summary, replace: Some(replace) })
+            Ok(Candidate { summary: summary, replace: replace })
         }).collect()
     }